'''
list列表:是python里面的一种容器、集合类型，它可以装若干个不同数据类型的数据
使用[]来包装这些数据，每一个数据之间用逗号间隔
它给每一个数据第一排了一个下标，从0开始
在python中，多数的集合、容器是可以直接进行打印的，它把集合|容器的所有元素都打印出来
    1.列表是一种有序的集合，可以存储任意类型的数据，包括数字、字符串、布尔值、列表、元组、字典等。
    2.列表是可变的，也就是说可以修改列表中的元素。
    3.列表的语法：[元素1,元素2,元素3,...]
    4.列表的下标从0开始，也就是说第一个元素的下标是0，第二个元素的下标是1，以此类推。
    5.列表的切片：列表[起始下标:结束下标:步长]
    6.列表的常用方法：
        1.append()：在列表的末尾添加一个元素。
        2.pop()：删除列表的末尾元素。
        3.remove()：删除列表中的指定元素。
        4.insert()：在列表的指定位置插入一个元素。
        5.index()：返回列表中指定元素的下标。
        6.count()：返回列表中指定元素的个数。
        7.sort()：对列表进行排序。
        8.reverse()：反转列表。
        9.copy()：复制列表。
        10.clear()：清空列表。
        11.extend()：将一个列表中的元素添加到另一个列表中。
        12.len()：返回列表的长度。
        13.max()：返回列表中的最大值。
        14.min()：返回列表中的最小值。
        15.sum()：返回列表中所有元素的和。
        16.any()：判断列表中是否有至少一个元素为True。
        17.all()：判断列表中是否所有元素都为True。
        18.enumerate()：返回一个枚举对象，包含列表中的元素和它们的下标。
        19.zip()：将多个列表中的元素打包成一个元组。
        20.map()：将一个函数应用到列表中的每个元素上。
        21.filter()：过滤列表中的元素。
        22.reduce()：对列表中的元素进行累积操作。
        23.list()：将其他类型的数据转换为列表。
        24.tuple()：将其他类型的数据转换为元组。
        25.set()：将其他类型的数据转换为集合。
        26.dict()：将其他类型的数据转换为字典。
        27.range()：生成一个整数序列。
        28.reversed()：返回一个反转的迭代器。
        29.sorted()：返回一个排序后的列表。
'''
#定义一个列表
list1=[1,2,3,"ABC",5,6.1,7,8,True] # 定义一个列表，里面包含1到9的数字
print(list1,type(list1)) # 输出列表，类型是list

#2.取值,配合[下标]
print(f"第0个元素是{list1[0]}") # 输出第0个元素，下标从0开始
print(f"第1个元素是{list1[1]}") # 输出第1个元素，下标从0开始
print(f"第2个元素是{list1[2]}") # 输出第2个元素，下标从0开始
print(f"第3个元素是{list1[3]}") # 输出第3个元素，下标从0开始
print(f"第4个元素是{list1[4]}") # 输出第4个元素，下标从0开始
print(f"第5个元素是{list1[5]}") # 输出第5个元素，下标从0开始


#3.修改值
list1[0]=10 # 修改第0个元素的值为10
list1[1]=20 # 修改第1个元素的值为20
list1[2]=30 # 修改第2个元素的值为30
list1[3]=40 # 修改第3个元素的值为40
list1[4]=50 # 修改第4个元素的值为50
list1[5]=60 # 修改第5个元素的值为60
print(list1) # 输出修改后的列表


#4.遍历
for i in list1: # 遍历列表，i是列表中的每一个元素，i的类型是int
    print(i) # 输出i的值，i的类型是int
print("="*50) # 输出分隔符，分隔符是50个等号

#5.使用下标的方式遍历
for i in range(len(list1)): # 遍历列表，i是列表中的每一个元素的下标，i的类型是int
    print(list1[i]) # 输出i的值，i的类型是int
print("="*50) # 输出分隔符，分隔符是50个等号

#6.计算长度
print("list1的长度是%d" %len(list1)) # 输出列表的长度，长度是9，类型是int
print(f"列表的长度是{len(list1)}") # 输出列表的长度，长度是9，类型是int


print("*"*30) # 输出分隔符，分隔符是50个等号
'''
列表的元素：增加和删除

'''
#1.定义列表
list2=[1,2,3] # 定义一个列表，里面包含1到9的数字
print(list2) # 输出列表，类型是list

#2.追加内容
list2.append("abc") # 在列表的末尾添加一个
list2.append("xyz")
list2.append("uio")
print(list2) # 输出列表，类型是list

#3.删除元素
    #3.1按照下标删除
list2.pop(2) # 删除第2个元素，下标从0开始
print(list2) # 输出列表，类型是list
        #如果这个下标不存在，会报错
#list2.pop(10) #IndexError: pop index out of range
    #3.2按照值删除
list2.remove("abc") # 删除值为"abc"的元素，注意：如果列表中有多个值为"abc"的元素，只会删除第一个
print(list2) # 输出列表，类型是list
        #如果这个值不存在，会报错
#list2.remove("111") #ValueError: list.remove(x): x not in list


'''
 4.列表的排序和嵌套
   4.1排序
     
   4.2嵌套
'''
#4.1 排序
list3=[20,5,16,7,81,9] # 定义一个列表
print(list3) # 输出列表，类型是list
#升序排序：从小到大排序
list3.sort() # 升序排序，默认是升序排序，从小到大排序，注意：这个方法会修改原列表
print(list3) # 输出列表，类型是list
#降序排序：从大到小排序
list3.sort(reverse=True) # 降序排序，reverse=True表示降序排序，从大到小排序，注意：这个方法会修改原列表
print(list3) # 输出列表，类型是list
#列表的逆置：翻转列表
list4=[20,5,33,7,81,9] # 定义一个列表
list4.reverse() # 逆置，注意：这个方法会修改原列表
print(list4) # 输出列表，类型是list
#4.2嵌套
list5=[
       ["aa","bb","cc"],
       [4,5,6],
       [True,False,True]
      ] # 定义一个列表，里面包含1到9的数字，注意：列表中的元素可以是列表
print(list5) # 输出列表，类型是list
print(list5[2][0],type(list5)) # 输出第3个元素，类型是list
#修改值
list5[1][0]="abc" # 修改第3个元素的第0个元素的值为"abc"，注意：列表中的元素可以是列表
print(list5) # 输出列表，类型是list
#遍历
for i in list5:# 遍历列表，i是列表中的每一个元素，i的类型是int
   for j in i: # 遍历列表，i是列表中的每一个元素，i的类型是int
    print(j,end="\t") # 输出i的值，i的类型是int
print() # 换行
print("*"*50) # 输出分隔符，分隔符是50个等号